import { verifyToken } from './jwt'
import type { ApiResponse } from '../../types'

/**
 * 权限验证结果接口
 */
export interface AuthResult {
  success: boolean
  user?: any
  error?: ApiResponse<any>
}

/**
 * 验证管理员权限（root权限）
 * 检查请求头中的JWT令牌并验证用户是否具有root权限
 * 项目使用简单权限模式：只有root用户能访问管理员接口，其他都是公开接口
 * @param {any} event - Nuxt事件对象
 * @returns {Promise<AuthResult>} 验证结果
 */
export async function verifyRootAuth(event: any): Promise<AuthResult> {
  try {
    // 获取授权头部
    const authHeader = getHeader(event, 'authorization')
    if (!authHeader || !authHeader.startsWith('Bearer ')) {
      return {
        success: false,
        error: {
          success: false,
          message: '未提供有效的授权令牌'
        }
      }
    }
    
    // 提取令牌
    const token = authHeader.substring(7)
    const decoded = await verifyToken(token)
    
    // 验证令牌有效性和root权限
    if (!decoded || decoded.role !== 'root') {
      return {
        success: false,
        error: {
          success: false,
          message: '权限不足，需要管理员权限'
        }
      }
    }

    return {
      success: true,
      user: decoded
    }
    
  } catch (error) {
    console.error('权限验证失败:', error)
    return {
      success: false,
      error: {
        success: false,
        message: '权限验证失败，请稍后重试'
      }
    }
  }
}

/**
 * 管理员权限验证装饰器函数
 * 用于包装需要管理员权限的API处理函数
 * 只验证root权限，符合项目的简单权限模式
 * @param {Function} handler - API处理函数
 * @returns {Function} 包装后的处理函数
 */
export function withRootAuth(handler: Function) {
  return async (event: any) => {
    // 执行root权限验证
    const authResult = await verifyRootAuth(event)
    
    // 如果验证失败，直接返回错误
    if (!authResult.success) {
      return authResult.error
    }
    
    // 将用户信息添加到事件上下文中，供处理函数使用
    event.context.user = authResult.user
    
    // 调用原始处理函数
    return await handler(event)
  }
}